package main

import (
	"fmt"
	"os"
)

/*
	函数管理系统
	功能包括查看、新增和删除
*/

var (
	allStudents map[int64]*student
)

type student struct {
	id   int64
	name string
}

func newStudent(id int64, name string) *student {
	return &student{
		id:   id,
		name: name,
	}
}

func showAllStudents() {
	for k, v := range allStudents {
		fmt.Printf("学号：%d 姓名：%s\n", k, v.name)
	}
}

func addStudent() {
	// 创建一个学生
	// 添加
	var (
		id   int64
		name string
	)
	fmt.Print("请输入学生的学号：")
	fmt.Scanln(&id)
	fmt.Print("请输入学生的姓名：")
	fmt.Scanln(&name)

	_, ok := allStudents[id]
	if ok {
		fmt.Println("该学号已存在，请检查！")
	} else {
		newStu := newStudent(id, name)
		allStudents[id] = newStu
	}
}

func deleteStudent() {
	var id int64
	fmt.Print("请输入待删除学生的学号：")
	fmt.Scanln(&id)
	_, ok := allStudents[id]

	if !ok {
		delete(allStudents, id)
	} else {
		fmt.Println("查无此人！")
	}
}
func main() {
	// 1. 打印菜单
	// 2. 等待用户选择
	// 3. 执行相应功能函数
	allStudents = make(map[int64]*student, 48) // 初始化
	fmt.Println("欢迎进入学生管理系统！")
	for {
		fmt.Println(`
		1. 查看所有学生
		2. 新增学生
		3. 删除学生
		4. 退出
	`)
		fmt.Print("请输入选择:")
		var choice int
		fmt.Scanln(&choice)
		fmt.Printf("你选择了命令 %d。\n", choice)
		switch choice {
		case 1:
			showAllStudents()
		case 2:
			addStudent()
		case 3:
			deleteStudent()
		case 4:
			os.Exit(0)
		default:
			fmt.Println("无法识别的选项！")
		}
	}
}
